package com.yy.poly_.polyarr_;

/**
 * chapter08  com.yy.poly_.polyarr_
 * 2023-04-07 16:11
 *
 * @author yy yuyue
 * description : 不可描述
 * @date 2023/4/7 16:11
 */
public class PloyArray {
    public static void main(String[] args) {
        //应用实例： 现有一个继承结构如下:   要求创建1个Person对象，
        //2个Student 对象和 2个Teacher对象,  统一放在数组中, 并且调用每个对象的say方法
        Person[] persons = new Person[5];
        persons[0] = new Person("cxk",20);
        persons[1] = new Student("wyb",18,100);
        persons[2] = new Student("mjq",20,30.1);
        persons[3] = new Teacher("lh",30,20000);
        persons[4] = new Teacher("wyf",40,35000);

        //循环遍历多态数组, 调用say
        for (int i = 0; i < persons.length; i++) {
            //老师提示: persons[i] 的编译类型是 Person, 运行类型是根据实际情况有JVM来判断
            System.out.println(persons[i].say());//动态绑定机制
            //\\这里返回的是字符串,所以要有输出语句!!
            //这里大家聪明, 使用类型判断 + 向下转型
           if(persons[i] instanceof Student){ //判断person[i]的 运行类型是不是Student
               ((Student)persons[i]).study();//向下转型
               //小伙伴也可以使用一条语句  ((Student)persons[i]).study();
//               Student student = (Student)persons[i];
//               student.study();

           } else if(persons[i] instanceof Teacher){
               ((Teacher)persons[i]).teach();
//               Teacher teacher = (Teacher)persons[i];
//               teacher.teach();

           } else if (persons[i] instanceof Person) {
               //.....

           }else {
               System.out.println("你的类型有误,请自己检查");

           }
            //判断person[i] 的运行类型是不是 Student

            //小伙伴也可以使用一条语句
//            persons[i].teach();
//           persons[i].study();

        }

    }
}
